#include <stdio.h>

// 1. typedef 可以简化 struct 关键字的使用
typedef struct Person Person;

struct Person {
    char name[128];

    int age;
};

// 2.typedef 在结构体定义的时候也可以使用
typedef struct Student {
    int id;

    char name[128];

    int age;
} Student;

void test01() {
    Person person_01 = {"Blue", 19};

    printf("name = %s, age = %d\n", person_01.name, person_01.age);
}

void test02() {
    Student student_01 = {10001, "Yui", 23};

    printf("id = %d, name = %s, age = %d\n", student_01.id, student_01.name, student_01.age);
}

void test03() {
    char *p1, p2;

    printf("p1 变量的字节长度为: %lu\n", sizeof(p1)); // 8
    printf("p2 变量的字节长度为: %lu\n", sizeof(p2)); // 1

    // 为什么会出现上述情况, 主要是因为 p1 的 数据类型为 指针, 而 p2 的数据类型为 char 型变量

    // 3.使用 typedef 可以区分数据结构
    typedef char *PCHAR;
    PCHAR p3, p4;

    printf("p1 变量的字节长度为: %lu\n", sizeof(p3)); // 8
    printf("p2 变量的字节长度为: %lu\n", sizeof(p4)); // 8
}

// 4.使用 typedef 提高代码可移植性
void test04() {
    // 在不同的系统下, 可以使用不同的数据类型代表正整型变量
    typedef long long MY_INT;

    MY_INT a = 100;
    MY_INT b = 200;
}

int main() {
    test01();

    test02();

    test03();

    test04();

    return 0;
}